Вернуться на главную страницу

 

Актуальная онлайн версия документации лежит здесь.

 


Документация

Учебник

Быстрый старт

Более сложные схемы

Как синтезировать звук, похожий на уже существующий

Дополнительные возможности

Теория и история

Звук и сигнал

Дискретное представление сигнала

Опыты Гельмгольца

Преобразование Фурье

Аддитивный синтез

Установка программы

На компьютерах с Windows

На компьютерах с Linux

Архитектура и технологии

Фронтенд

Бекенд

Интерфейс командной строки

Методы REST API

Лицензии

Учебник

Быстрый старт

Для установки программы необходимо, чтобы на компьютере под управлением Windows были уже установлены Python (python.org), система управления версиями Git for Windows (git-scm.com) и любой современный браузер. Работоспособность проверена на Win 10, Python 3.13, актуальных версиях браузеров Firefox, Chrome и Edge. Работает также под Linux (кроме проигрывания звука из командной строки), но команды установки придется вводить по одной руками. Более подробное описание процесса установки, в том числе под Linux, см. ниже в разделе “Установка приложения”.

 

Чтобы установить программу под Windows, сделайте клон репозитория github.com/kgushin/synth1561:

 

git clone https://github.com/kgushin/synth1561

 

В каталоге, в котором вы выполнили эту команду, появился подкаталог synth1561. Перейдите в этот подкаталог:

 

cd synth1561

 

Запустите файл install.bat. Будет создано виртуальное окружение Python и установлены необходимые программе дополнительные модули.

 

Для запуска программы используйте run.bat

 

После установки будет автоматически открыта в браузере страница программы http://127.0.0.1:5000 (см. Рис. 1). На экране вы увидите палитру элементов (1) и рабочую область (2, с клетчатым фоном) с окном краткой справки (3) и панелью кнопок (4).

 

Рис. 1. Вид экрана приложения после запуска.

 

Щелкните на окне краткой справки и нажмите клавишу Delete, чтобы удалить его. Теперь можно начать собирать схему синтеза звука, перетаскивая элементы из палитры слева. Перетащите в рабочую область элемент “Генератор”. Он генерирует синусоидальный сигнал указанной частоты. По умолчанию это 220 герц, но вы можете ввести другое значение. Большинство музыкальных звуков лежат в диапазоне от 50 до 2000 герц.

 

Рис. 2. В рабочую область добавлен генератор.

 

Чтобы синтезированный звук можно было послушать, нужно добавить на схему элемент “Звуковое устройство”. Он позволяет указать длительность и громкость синтезируемого звука.

 

Рис. 3. В рабочую область добавлено звуковое устройство.

 

Обратите внимание на иконку с сердечком  в панели кнопок. Сейчас у неё красный фон, это означает, что схема неработоспособна. Чтобы она заработала, нужно соединить генератор со звуковым устройством. Щелкните на кружочке на правой стороне генератора (это его выход) и перетащите его ко входу звукового устройства. Появится соединительная линия. Фон иконки с сердечком станет зелёным, значит, схема рабочая. Теперь можно нажать на кнопку воспроизведения звука и послушать, что получилось.

Рис. 4. Минимальная рабочая схема синтеза.

 

Для того, чтобы понять, почему какая-то схема не работает, щелкайте по сердечку – появится окно с описанием ошибок. Если написано, что ошибка связана с элементом с таким-то идентификатором (например, id=8), то понять, какой именно элемент скрывается под этим номером, можно наведя указатель мыши на панель заголовка любого элемента. Через секунду появится подсказка с его идентификатором (рис. 5).

 

Рис. 5. Подсказка с идентификатором элемента.

Более сложные схемы

 

Звук, сгенерированный нашей минимальной схемой, очень скучный и неинтересный. Давайте сделаем его поинтереснее с помощью гармоник, модуляторов и огибающих. Добавьте на схему ещё несколько элементов, как показано на экране ниже, и укажите их параметры.

 

Рис. 6. Схема поинтереснее.

 

Эта схема звучит уже гораздо интереснее, правда? Вот какие элементы позволяют этого добиться.

 

Генератор гармоникиэлемент, генерирующий синусоидальный сигнал, частота которого в целое число раз больше, чем частота подключенного к нему генератора. Музыкальные звуки состоят из основного тона и множества гармоник, подробнее об этом читайте в разделе “Предметная область”.

 

Огибающаяэто элемент, позволяющий управлять изменением громкости составляющей звука во времени. Её параметры имеют вид списка (Т1,А1),(Т2,А2),(Т3,А3) и т. д., где Тn – момент времени, считая от начала звука, Аn – относительная амплитуда (0..1) в этот момент. На схеме огибающая изменяет громкость гармоники от максимума до нуля за три секунды, это изменение задано строкой параметров (0,1),(3,0).

 

Модуляторещё один полезный элемент, управляющий громкостью и спектром сигнала. Основной сигнал подается на верхний вход, управляющий – на нижний. Параметр “Глубина” задает степень влияния управляющего сигнала на основной. В нашей схеме управляющий сигнал с очень низкой частотой 2 герца заставляет основной сигнал делаться то громче, то тише – два раза в секунду. В музыке этот эффект называется “вибрато”.

Микшерэлемент, просто суммирующий все сигналы, поступающие на его входы.

 

Чтобы получить подсказку по любому типу элементов во время работы, нажмите на знак вопроса в палитре элементов. А чтобы не забыть, для чего служит та или иная часть большой схемы, используйте элемент “Комментарий”.

 

Попробуйте получить самый крутой звук из минимального количества элементов. В качестве примера откройте и послушайте схему “Звук гонга”.

 

Рис. 7. Схема “Звук гонга”.

Как синтезировать звук, похожий на уже существующий

Если нужно синтезировать максимально правдоподобную копию уже существующего звука, предстоит сначала понять, из каких составляющих этот звук состоит. Для этого можно воспользоваться бесплатной программой Audacity (www.audacityteam.org). Открыв файл с записью нужного звука, смотрим его спектр в меню Analyze – Plot spectrum. Если звук сильно меняется во времени, нужно выделить его небольшую часть, где он меняется слабо.

 

На экране ниже (рис. 8) показан звук третьей струны обычной гитары и его спектр. Видно, что спектр состоит из множества пиков, соответствующих частотам 198 Гц, 198 * 2 = 296 Гц, 198 * 3 = 594 Гц и так далее. Это основной тон и его гармоники. Интенсивность всех гармоник разная. На графике она показана в децибелах. Шкала в децибелах логарифмическая: три децибела соответствуют разнице сигнала в два раза; шесть децибел – в два в квадрате, то есть четыре раза; девять децибел – два в кубе, то есть восемь раз, и так далее. Имеет смысл включать в схему генерации сигналы, которые слабее самой сильной составляющей не более чем на 24 децибела (в 256 раз), потому что более слабые почти не слышны.

 

Рис. 8. Звук гитары в программе Audacity и его спектр.

 

Собранная по этому принципу схема (она находится в файле “Звук гитары”) показана на рис. 9. Звук получился довольно похожий, если не считать самой начальной части, к которой в оригинале примешивается звук от удара пальца по струне.

 

Рис. 9. Схема “Звук гитары”. 

 

Дополнительные возможности

Схему можно в любой момент сохранить в файл для последующего использования. Если схема рабочая и вы можете услышать, как она звучит, то при желании можно также скопировать себе синтезированный звук. Звуковые файлы в формате .WAV сохраняются автоматически во время синтеза в каталоге проекта, в подкаталоге frontend/static/sound_cache. Имя файла совпадает с названием схемы.

 

Для того, чтобы наглядно увидеть форму сигнала в любой точке схемы, используйте элемент “Осциллограф”. Выделив часть графика, можно рассмотреть её более подробно. Двойной щелчок на графике возвращает к первоначальному масштабу.

Теория и история

Звук и сигнал

Звук это физическое явление, представляющее собой распространение упругих волн в газообразной, жидкой или твердой среде. Микрофон преобразует звук в электрический сигнал, значение амплитуды которого пропорционально величине звукового давления.  Такой сигнал (его называют аналоговым представлением звука) может усиливаться, обрабатываться и преобразовываться обратно в звуковые колебания при помощи усилителей, колонок, эквалайзеров и т. п. 

Дискретное представление сигнала

Компьютер не способен напрямую работать с аналоговым сигналом. Чтобы обрабатывать звук при помощи компьютера, сигнал необходимо сначала преобразовать в дискретную (цифровую) форму. Этим занимается один из компонентов звукового устройства компьютера – аналого-цифровой преобразователь (АЦП)

 

Цифровой сигнал представляет собой набор значений величины сигнала, в котором каждое значение соответствует определённому моменту времени. Каждое такое значение называется отсчётом (sample), а число отсчётов в секунду называется частотой дискретизации (sample rate). В большинстве компьютеров используется частота дискретизации 44100 Гц, а сами отсчёты представляются в виде знаковых 16-битных целых чисел.

 

Цифровое представление сигнала позволяет выполнять множество различных операций. Например, чтобы смешать два звука, нужно почленно суммировать их наборы отсчётов. Можно даже создать новые звуки с нуля: например, если сгенерировать последовательность случайных чисел и перевести её в звук – получится шум. Шум – очень важная и полезная составляющая для музыкальных звуков, между прочим! 

 

Кстати, для преобразования цифрового представления звука в аналоговый сигнал служит другой обязательный компонент звукового устройства компьютера – цифро-аналоговый преобразователь (ЦАП).

Опыты Гельмгольца

Немецкий физик Герман Гельмгольц (1821 – 1894) проводил исследования в области акустики науки о звуке. Он изготовил набор резонаторов в виде шаров с двумя небольшими отверстиями, позволяющий определить, какие частоты имеются в составе того или иного звука. 

 

Рис. 10. Резонаторы Гельмгольца (источник: https://museum.tsu.ru/content/rezonatory-gelmgolca)

 

Оказалось, что если сыграть всего один звук, например, на скрипке, то в ответ начинают звучать сразу несколько резонаторов, но с разной интенсивностью. Таким образом Гельмгольц установил, что звук музыкальных инструментов складывается из звуковых колебаний определенной частоты, называемых основным тоном, и его гармоник, или обертонов – колебаний, чья частота превышает частоту основного тона в целое число раз. Соотношение обертонов как раз и определяет тембр (окраску) звука.

Преобразование Фурье

Французский математик Жан-Батист Фурье (1768 – 1830) доказал, что периодический сигнал сложной формы можно представить в виде суммы нескольких обычных синусоид. Такое преобразование называется разложением в ряд Фурье. Математически его можно записать так:

 

Пользуясь преобразованием Фурье, сигнал можно представить графически не только как зависимость его величины от времени, но и в виде графика спектра, где по горизонтальной оси откладывается частота, а по вертикальной интенсивность. На таком графике легко увидеть, из каких частот состоит конкретный звук.

 

Рис. 11. Периодический сигнал (последовательность прямоугольных импульсов) и его спектр (источник: https://www.practicaltheory.ru/?p=639)

Аддитивный синтез

С изобретением осциллоскопа (1893) учёные смогли убедиться, что музыкальный звук (точнее, его аналоговое представление) представляет собой периодический сигнал сложной формы. Следовательно, воспользовавшись преобразованием Фурье, его можно представить как сумму нескольких синусоидальных сигналов различной частоты, фазы и амплитуды.

 

Но можно поступить и наоборот! Если взять несколько отдельных генераторов синусоидального сигнала, то путём настройки их частоты, фазы и амплитуды можно “сложить” из отдельных составляющих музыкальный звук с желаемыми тембровыми характеристиками. Именно такой способ был положен в основу музыкальных синтезаторов, массово появившихся в 60-70е годы 20 века. Он называется аддитивным синтезом, от английского слова addition – сложение.

 

Рис. 12. Принцип аддитивного синтеза

 

Вообще-то первые электромузыкальные синтезаторы создавались намного раньше, ещё в 19 веке, но это были единичные (и очень дорогие) экспериментальные установки, и в них использовались разные методы синтеза. Первый ставший по-настоящему популярным синтезатор изобрёл в 1920 году русский физик Лев Термен – в честь автора его изобретение называется “терменвокс”. А в 1960-х американский инженер Роберт Муг создал доступные синтезаторы, которыми сразу же начали пользоваться многие музыканты.

 

Рис. 13. Роберт Муг и разработанные им синтезаторы (источник: https://xlr8r.com/gear/robert-moog-inducted-into-the-inventors-hall-of-fame/)

 

Программа SYNTH1561 как раз и позволяет собрать из отдельных элементов простые установки синтеза, похожие по устройству на синтезаторы Муга. Кроме генераторов основного тона и гармоник, в её состав можно добавить и другие элементы, позволяющие управлять силой и составом сигнала. Комбинируя их в разных сочетаниях, можно получить очень интересные и неожиданные эффекты. Попробуйте сами!

Установка программы

На компьютерах с Windows

  1. 1.Установите Python версии 3.12 или более поздней. Если у вас уже есть Python и Git, можно сразу перейти к пункту 5. 

  2. 2.Установите PyCharm Community Edition (нужен только для разработки; если хотите просто пользоваться программой, устанавливать компоненты для разработки не обязательно). 

  3. 3.Загрузите с сайта git-scm.com, установите и настройте Git for Windows: 

git config --global user.name "Ваше имя"

git config --global user.email ваш_емейл@example.com

  1. 4.Создайте аккаунт на GitHub (только для разработки) 

  2. 5.Сделайте клон репозитория https://github.com/kgushin/synth1561: 

git clone https://github.com/kgushin/synth1561

  1. 6.Перейдите в каталог проекта, создайте виртуальное окружение Python и установите необходимые модули. Это можно сделать путём запуска командного файла install.bat, но если возникают ошибки, нужную последовательность команд можно выполнить вручную: 

cd synth1561

py -m venv venv

venv\Scripts\activate

pip install pytest &rem только для разработки

pip install flask

pip install python-dotenv

pip install numpy

pip install sounddevice

 

  1. 7.Для повторного запуска проекта используйте файл run.bat из каталога проекта. Будет запущен Flask и открыта страница проекта в браузере по умолчанию. Или можно сделать то же самое из командной строки отдельными командами: 

 

cd synth1561 &rem укажите полный путь к каталогу проекта

venv\Scripts\activate

flask run [--debug] [--port PORT_NUMBER] &rem порт по умолчанию 5000

 

И затем вручную ввести в браузере адрес 127.0.0.1:5000.

 

На компьютерах с Linux

Для установки под Linux придётся выполнить перечисленные выше команды вручную. При установке внимательно читайте сообщения об ошибках – например, в наших тестах выяснилось, что в Linux Mint по умолчанию не установлен Python-модуль для поддержки виртуальных окружений, его пришлось поставить вручную (в других дистрибутивах могут быть свои особенности, например, интерпретатор Python обычно вызывается командой python3 вместо py). Программа была протестирована на текущей версии Linux Mint с браузером Firefox. Все функции доступны в полном объеме, кроме вызова метода play из командной строки (т. к. модуль sounddevice не совместим с Linux).

 

Пример последовательности команд для установки и запуска приложения под Linux Mint 22.1 (предполагается, что Git и Python 3.12 уже установлены):

 

apt install python3.12-venv

 

python3 -m venv venv

source venv/bin/activate

 

pip install pytest

pip install flask

pip install python-dotenv

pip install numpy

pip install sounddevice

 

flask run --debug

 

 Теперь можно открыть в браузере страницу программы http://127.0.0.1:5000.

Архитектура и технологии

Фронтенд

JavaScript+HTML+CSS с использованием библиотеки Drawflow (https://github.com/jerosoler/Drawflow) для построения структурной схемы синтеза, библиотеки SweetAlert для диалоговых окон, библиотеки D3 для вывода графика сигнала и библиотеки иконок Font Awesome для оформления. Все ресурсы размещены локально, подключение к интернету для работы программы не требуется (требуется только для установки).

Бекенд

Бекенд написан на языке Python версии 3.13.1 с использованием дополнительных модулей (numpy, sounddevice, dotenv, pytest), среды разработки PyCharm Community Edition и системы контроля версий Git. Вызов функций бекенда возможен через интерфейс командной строки или с фронтенда через REST API.

Интерфейс командной строки

 

Интерфейс командной строки предназначен в основном для отладки и профайлинга. Вызов функций бекенда из командной строки:

 

backend_cli.py [options]

Опции:

 

-h, --helpвывести эту справку

-i, --input preset_nameимя файла json с параметрами схемы 

-c, --checkпроверить корректность схемы, не выполняя синтеза

-p, --playсинтезировать и воспроизвести звук (воспроизведение работает только в Windows; звуковой файл preset_name.wav сохраняется в каталоге проекта в подкаталоге cli_save)

-e, –exportсохранить результат в файл cli_save/preset_name.txt как набор значений амплитуды (-1..1) для импорта в программу Audacity или анализа внешними программами

Методы REST API

 

check проверка схемы

save_preset сохранение схемы в заданный файл

load_preset загрузка схемы из заданного файла

list_presets получение списка сохраненных схем

play синтез и воспроизведение звука

Лицензии

Все используемые компоненты и инструменты разработки, а также собственный код, являются открытыми и/или свободно распространяемыми.

 

Компонент или инструмент

Лицензия

Собственный код, библиотека Drawflow 

MIT

Библиотека иконок FontAwesome

https://fontawesome.com/license/free

Редактор PyCharm 

https://www.jetbrains.com/legal/docs/toolbox/user_community/

Git

GNU GPL 2.0